import type { FetchOptions } from 'ofetch'
import type { NitroFetchOptions } from 'nitropack'

// API 基础配置
// 在开发环境中使用代理，不需要基础URL
const API_BASE_URL = process.env.NODE_ENV === 'development' ? '' : (process.env.API_BASE_URL || 'http://localhost:9806')

// API 响应接口
export interface ApiResponse<T = any> {
  code: number
  msg: string
  payload?: T
}

// 登录请求参数
export interface LoginRequest {
  account: string
  pwd: string
  captcha: string
  csrf_token: string
}

// 登录响应数据
export interface LoginResponse {
  id: string
  account: string
  role_id: number[]
  status: number
  next: string
}

// 创建 API 实例
export const api = $fetch.create({
  baseURL: API_BASE_URL,
  credentials: 'include',
  headers: {
    'Content-Type': 'application/json'
  }
})

// 请求拦截器
export const apiRequest = async <T = any>(
  url: string,
  options: FetchOptions = {}
): Promise<ApiResponse<T>> => {
  // 创建新的 options 对象，避免类型问题
  const newOptions: any = { ...options }
  
  // 确保method是正确的类型
  if (newOptions.method) {
    newOptions.method = newOptions.method.toUpperCase()
  }
  
  try {
    const response = await api<ApiResponse<T>>(url, newOptions as NitroFetchOptions<any>)
    return response
  } catch (error: any) {
    console.error('API请求错误:', error)
    
    // 处理网络错误
    if (error.response) {
      return {
        code: error.response.status || 500,
        msg: error.response._data?.msg || '网络请求失败'
      }
    }
    
    // 处理其他错误
    return {
      code: 500,
      msg: error.message || '未知错误'
    }
  }
}

// 登录 API
export const loginApi = (data: LoginRequest) => {
  return apiRequest<LoginResponse>('/adm/passport/login', {
    method: 'POST',
    body: data
  })
}

// 获取验证码
export const getCaptcha = () => {
  return `${API_BASE_URL}/adm/passport/captcha?r=${Math.random()}`
}

// 获取登录页面信息
export const getLoginInfo = () => {
  return apiRequest<{
    csrf_token: string
    public_key: string
  }>('/adm/passport/login', {
    method: 'GET'
  })
}

// 检查登录状态
export const checkAuth = () => {
  return apiRequest('/adm/auth/check', {
    method: 'GET'
  })
}

// 退出登录
export const logout = () => {
  return apiRequest('/adm/passport/logout', {
    method: 'POST'
  })
}